package com.tom.architect02.mnbase.annotation.fs;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * 这个类用来代理new View.OnClickListener() 对象，并执行这个对象上的onClick方法
 */
public class ListenerInvocationHandler implements InvocationHandler {
    private Object activity;
    private Method activityMethod;

    public ListenerInvocationHandler(Object activity, Method activityMethod) {
        this.activity = activity;
        this.activityMethod = activityMethod;
    }

    /**
     * 就表示onClick的执行，程序执行onClick方法，就会转到这里。
     * 框架中不直接执行onCLick，所以在框架中要有个地方让invoke 和onClick关联上。
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 调用注解了的click()
        return activityMethod.invoke(activity, args);
    }
}
